package ar.uade.distribuidas.tpo.base.dominiodto;

import java.io.Serializable;
import java.util.LinkedList;
import java.util.List;

import org.joda.time.DateTime;

public class FacturaDTO implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private int numeroFactura;
	private String fechaEmision, fechaVencimiento;
	private ClienteDTO cliente;
	private List<ItemFacturaDTO> itemsFactura;
	private CondicionDeVentaDTO condicionVenta;
	private float precio;

	public FacturaDTO() {
		itemsFactura = new LinkedList<ItemFacturaDTO>();
	}

	public FacturaDTO(int numero, String fechaEmision, String fechaVenciomiento, ClienteDTO cliente,
			List<ItemFacturaDTO> itemsFactura, CondicionDeVentaDTO condicionVenta) {
		super();
		this.numeroFactura = numero;
		this.fechaEmision = fechaEmision;
		this.fechaVencimiento = fechaVenciomiento;
		this.cliente = cliente;
		this.itemsFactura = itemsFactura;
		this.condicionVenta = condicionVenta;
	}

	public int getNumeroFactura() {
		return numeroFactura;
	}

	public void setNumeroFactura(int numeroFactura) {
		this.numeroFactura = numeroFactura;
	}

	public String getFechaEmision() {
		return fechaEmision;
	}

	public void setFechaEmision(String fechaEmision) {
		this.fechaEmision = fechaEmision;
	}

	public String getFechaVencimiento() {
		return fechaVencimiento;
	}

	public void setFechaVencimiento(String fechaVencimiento) {
		this.fechaVencimiento = fechaVencimiento;
	}

	public ClienteDTO getCliente() {
		return cliente;
	}

	public void setCliente(ClienteDTO cliente) {
		this.cliente = cliente;
	}

	public List<ItemFacturaDTO> getItemsFactura() {
		return itemsFactura;
	}

	public void setItemsFactura(List<ItemFacturaDTO> itemsFactura) {
		this.itemsFactura = itemsFactura;
	}

	public CondicionDeVentaDTO getCondicionVenta() {
		return condicionVenta;
	}

	public void setCondicionVenta(CondicionDeVentaDTO condicionVenta) {
		this.condicionVenta = condicionVenta;
	}

	public float getPrecio() {
		return precio;
	}

	public void setPrecio(float precio) {
		this.precio = precio;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		FacturaDTO other = (FacturaDTO) obj;
		if (cliente == null) {
			if (other.cliente != null)
				return false;
		} else if (!cliente.equals(other.cliente))
			return false;
		if (condicionVenta == null) {
			if (other.condicionVenta != null)
				return false;
		} else if (!condicionVenta.equals(other.condicionVenta))
			return false;
		if (fechaEmision == null) {
			if (other.fechaEmision != null)
				return false;
		} else if (!fechaEmision.equals(other.fechaEmision))
			return false;
		if (fechaVencimiento == null) {
			if (other.fechaVencimiento != null)
				return false;
		} else if (!fechaVencimiento.equals(other.fechaVencimiento))
			return false;
		if (itemsFactura == null) {
			if (other.itemsFactura != null)
				return false;
		} else if (!itemsFactura.equals(other.itemsFactura))
			return false;
		if (numeroFactura != other.numeroFactura)
			return false;
		if (Float.floatToIntBits(precio) != Float.floatToIntBits(other.precio))
			return false;
		return true;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((cliente == null) ? 0 : cliente.hashCode());
		result = prime * result + ((condicionVenta == null) ? 0 : condicionVenta.hashCode());
		result = prime * result + ((fechaEmision == null) ? 0 : fechaEmision.hashCode());
		result = prime * result + ((fechaVencimiento == null) ? 0 : fechaVencimiento.hashCode());
		result = prime * result + ((itemsFactura == null) ? 0 : itemsFactura.hashCode());
		result = prime * result + numeroFactura;
		result = prime * result + Float.floatToIntBits(precio);
		return result;
	}

	@Override
	public String toString() {
		return "FacturaDTO [numeroFactura=" + numeroFactura + ", fechaEmision=" + fechaEmision + ", fechaVencimiento="
				+ fechaVencimiento + ", cliente=" + cliente + ", itemsFactura=" + itemsFactura + ", condicionVenta="
				+ condicionVenta + ", precio=" + precio + "]";
	}

}
